#define _CRT_SECURE_NO_WARNINGS 1



//#include <stdio.h>
//
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	printf("%p\n", &i);
//	printf("%p\n", &arr[0]);
//	printf("%p\n", &arr[9]);
//
//	for (i = 0; i <= 12; i++)
//	{
//		arr[i] = 0;
//		printf("hehe\n");
//	}
//	
//	return 0;
//}




//模拟实现库函数：strcpy
//拷贝字符串的

//#include <string.h>
//
//int main()
//{
//	char arr1[] = "hello bit";
//	char arr2[20] = "xxxxxxxxxxxxx";
//	//strcpy(arr2, arr1);
//	//printf("%s\n", arr2);
//	printf("%s\n", strcpy(arr2, arr1));
//
//	return 0;
//}





//void my_strcpy(char* dest, char* src)
//{
//	
//	while (*src != '\0')
//	{
//		*dest = *src;
//		dest++;
//		src++;
//	}
//
//	*dest = *src;// \0 的拷贝
//}
//
//int main()
//{
//	char arr1[] = "hello bit";
//	char arr2[20] = "xxxxxxxxxxxxx";
//	my_strcpy(arr2, arr1);
//	printf("%s\n", arr2);
//
//	//printf("%s\n", my_strcpy(arr2, arr1));
//
//	return 0;
//}




#include <assert.h>

//void my_strcpy(char* dest, char* src)
//{
//	//断言
//	assert(dest != NULL);
//	assert(src != NULL);
//
//	while (*src != '\0')
//	{
//		*dest = *src;
//		dest++;
//		src++;
//	}
//
//	*dest = *src;// \0 的拷贝
//}


//函数返回的是目标空间的起始地址
//char* my_strcpy(char* dest, const char* src)
//{
//	char* ret = dest;
//	//断言
//	assert(dest != NULL);
//	assert(src != NULL);
//
//	while (*dest++ = *src++)// 赋值表达式，比如把h赋给*dest，表达式的结果就是h的ASCII码值
//	{
//		;//空语句
//	}
//
//	return ret;
//}
//
//int main()
//{
//	char arr1[] = "hello bit";
//	char arr2[20] = "xxxxxxxxxxxxx";
//	char* p = NULL;
//
//	//my_strcpy(p, arr1);
//	//my_strcpy(arr2, arr1);
//
//	//printf("%s\n", arr2);
//
//	printf("%s\n", my_strcpy(arr2, arr1));
//
//	return 0;
//}





//int main()
//{
//	//int num = 10;
//	//num = 20;
//
//	//int* p = &num;
//	//*p = 200;
//	
//	const int n = 100;
//	//n = 200;//err
//
//	//int* p = &n;
//	//*p = 20;
//	//printf("%d\n", n);
//
//	const int* p = &n;
//	//*p = 20;//err
//
//	return 0;
//}



//const 修饰指针的时候
//当const 放在*的左边的时候，限制的是指针指向的内容，不能通过指针变量改变指针指向的内容，但是指针变量本身是可以改变的
//当const 放在*的右边的时候，限制的是指针变量本身，指针变量本身是不能改变的，但是指针指向的内容是可以通过指针来改变的

//int main()
//{
//	int m = 10;
//	int n = 100;
//	//const可以修饰指针
//	const int* p = &m;
//	//*p = 0;//err
//	p = &n;//ok
//
//	printf("%d\n", m);
//
//	return 0;
//}



//int main()
//{
//	int m = 10;
//	int n = 100;
//	//const可以修饰指针
//	int* const p = &m;
//	*p = 0;//ok
//	//p = &n;//err
//
//	printf("%d\n", m);
//
//	return 0;
//}



//int main()
//{
//	int m = 10;
//	int n = 100;
//	//const可以修饰指针
//	const int* const p = &m;
//	//*p = 0;//err
//	//p = &n;//err
//
//	printf("%d\n", m);
//
//	return 0;
//}




//模拟实现一个strlen函数
//assert
//const

//size_t 是专门为sizeof设计的一个类型
//size_t --> unsigned int / unsigned long
//>=0

#include <assert.h>

//size_t my_strlen(const char* str)
//{
//	assert(str != NULL);
//
//	size_t count = 0;
//
//	while (*str != '\0')
//	{
//		count++;
//		str++;
//	}
//
//	return count;
//}
//
//int main()
//{
//	char arr[] = "abc";
//	size_t len = my_strlen(arr);
//	printf("%zd\n", len);//zd是专门用来打印size_t类型的值的
//
//	return 0;
//}

//%u 无符号整数的




//int main()
//{
//	int a = 10//编译期间找到的一般都是语法问题
//
//	return 0;
//}




//链接型错误是在链接期间发现的错误

//int Add(int x, int y)
//{
//	return x + y;
//}
//
//int main()
//{
//	int ret = add(2, 3);
//
//	return 0;
//}




//int Add(int x, int y)
//{
//	return x - y;
//}
//
//int main()
//{
//	int ret = Add(2, 3);
//	printf("%d\n", ret);
//
//	return 0;
//}





#include <stdio.h>

int i;//全局变量，如果不初始化，默认是0
//静态变量和全局变量，如果不初始化，默认是0

int main()
{
    i--;//-1
    // int    size_t
    //size_t  size_t
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    
    return 0;
}